package com.xy.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@SpringBootApplication(scanBasePackages="com.xy.order")
@EnableDiscoveryClient
@EnableFeignClients
@MapperScan("com.xy.order.mapper")
@EnableAspectJAutoProxy
/**
 * seata 首先安装tc 从git 下载 对应版本，然后 修改创建 mysql seata数据库 然后 修改 seata 的config 里面的配置文件 直接复制
 *
 * server:
 *   port: 7091
 *
 * spring:
 *   application:
 *     name: seata-server
 *
 * logging:
 *   config: classpath:logback-spring.xml
 *   file:
 *     path: ${user.home}/logs/seata
 *   extend:
 *     logstash-appender:
 *       destination: 127.0.0.1:4560
 *     kafka-appender:
 *       bootstrap-servers: 127.0.0.1:9092
 *       topic: logback_to_logstash
 *
 * console:
 *   user:
 *     username: seata
 *     password: seata
 *
 * seata:
 *   config:
 *     # support: nacos, consul, apollo, zk, etcd3
 *     type: nacos
 *     nacos:
 *       server-addr: 127.0.0.1:8848
 *       namespace: 7e838c12-8554-4231-82d5-6d93573ddf32  #此处不填写 用DEFAULT_GROUP
 *       group: SEATA_GROUP
 *       username: nacos         #nacos的账户（请自行修改）
 *       password: nacos         #nacos的密码（请自行修改）
 *       data-id: seataServer.yml #对应文章后边在nacos中添加的配置
 *   registry:
 *     # support: nacos, eureka, redis, zk, consul, etcd3, sofa
 *     type: nacos
 *     nacos:
 *       application: seata-server
 *       server-addr: 127.0.0.1:8848
 *       group: SEATA_GROUP
 *       namespace:              #此处不填写，将会默认使用DEFAULT_GROUP
 *       cluster: default
 *       username: nacos         #nacos的账户（请自行修改）
 *       password: nacos         #nacos的密码（请自行修改）
 *   #store:
 *     # support: file 、 db 、 redis
 *    # mode: file
 * #  server:
 * #    service-port: 8091 #If not configured, the default is '${server.port} + 1000'
 *   security:
 *     secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
 *     tokenValidityInMilliseconds: 1800000
 *
 * 然后 修改 nacos 配置中心的配置：改成 需要的，尤其要改分组事务
 *
 * #For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
 * #Transport configuration, for client and server
 * transport.type=TCP
 * transport.server=NIO
 * transport.heartbeat=true
 * transport.enableTmClientBatchSendRequest=false
 * transport.enableRmClientBatchSendRequest=true
 * transport.enableTcServerBatchSendResponse=false
 * transport.rpcRmRequestTimeout=30000
 * transport.rpcTmRequestTimeout=30000
 * transport.rpcTcRequestTimeout=30000
 * transport.threadFactory.bossThreadPrefix=NettyBoss
 * transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
 * transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
 * transport.threadFactory.shareBossWorker=false
 * transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
 * transport.threadFactory.clientSelectorThreadSize=1
 * transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
 * transport.threadFactory.bossThreadSize=1
 * transport.threadFactory.workerThreadSize=default
 * transport.shutdown.wait=3
 * transport.serialization=seata
 * transport.compressor=none
 *
 * #Transaction routing rules configuration, only for the client
 * #指定事务分组至集群映射关系（等号右侧的集群名需要与Seata-server注册到Nacos的cluster保持一致） 很重要  xy-order-group是自定义的分布式事务组， 可以配置多个 在客户端 使用的时候只需要配置：tx-service-group: xy-order-group 一般配置成${spring.application.name}-group
 * service.vgroupMapping.xy-order-group=default
 * #If you use a registry, you can ignore it
 * service.default.grouplist=127.0.0.1:8091
 * service.enableDegrade=false
 * service.disableGlobalTransaction=false
 *
 * #Transaction rule configuration, only for the client
 * client.rm.asyncCommitBufferLimit=10000
 * client.rm.lock.retryInterval=10
 * client.rm.lock.retryTimes=30
 * client.rm.lock.retryPolicyBranchRollbackOnConflict=true
 * client.rm.reportRetryCount=5
 * client.rm.tableMetaCheckEnable=true
 * client.rm.tableMetaCheckerInterval=60000
 * client.rm.sqlParserType=druid
 * client.rm.reportSuccessEnable=false
 * client.rm.sagaBranchRegisterEnable=false
 * client.rm.sagaJsonParser=fastjson
 * client.rm.tccActionInterceptorOrder=-2147482648
 * client.tm.commitRetryCount=5
 * client.tm.rollbackRetryCount=5
 * client.tm.defaultGlobalTransactionTimeout=60000
 * client.tm.degradeCheck=false
 * client.tm.degradeCheckAllowTimes=10
 * client.tm.degradeCheckPeriod=2000
 * client.tm.interceptorOrder=-2147482648
 * client.undo.dataValidation=true
 * client.undo.logSerialization=jackson
 * client.undo.onlyCareUpdateColumns=true
 * server.undo.logSaveDays=7
 * server.undo.logDeletePeriod=86400000
 * client.undo.logTable=undo_log
 * client.undo.compress.enable=true
 * client.undo.compress.type=zip
 * client.undo.compress.threshold=64k
 * #For TCC transaction mode
 * tcc.fence.logTableName=tcc_fence_log
 * tcc.fence.cleanPeriod=1h
 *
 * #Log rule configuration, for client and server
 * log.exceptionRate=100
 *
 * #Transaction storage configuration, only for the server. The file, DB, and redis configuration values are optional.
 * store.mode=db
 * store.lock.mode=db
 * store.session.mode=db
 * #Used for password encryption
 * store.publicKey=
 *
 * #If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
 * store.file.dir=file_store/data
 * store.file.maxBranchSessionSize=16384
 * store.file.maxGlobalSessionSize=512
 * store.file.fileWriteBufferCacheSize=16384
 * store.file.flushDiskMode=async
 * store.file.sessionReloadReadSize=100
 *
 * #These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
 * store.db.datasource=druid
 * store.db.dbType=mysql
 * store.db.driverClassName=com.mysql.jdbc.Driver
 * store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
 * store.db.user=root
 * store.db.password=root
 * store.db.minConn=5
 * store.db.maxConn=30
 * store.db.globalTable=global_table
 * store.db.branchTable=branch_table
 * store.db.distributedLockTable=distributed_lock
 * store.db.queryLimit=100
 * store.db.lockTable=lock_table
 * store.db.maxWait=5000
 *
 * #These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
 * store.redis.mode=single
 * store.redis.single.host=127.0.0.1
 * store.redis.single.port=6379
 * store.redis.sentinel.masterName=
 * store.redis.sentinel.sentinelHosts=
 * store.redis.maxConn=10
 * store.redis.minConn=1
 * store.redis.maxTotal=100
 * store.redis.database=0
 * store.redis.password=
 * store.redis.queryLimit=100
 *
 * #Transaction rule configuration, only for the server
 * server.recovery.committingRetryPeriod=1000
 * server.recovery.asynCommittingRetryPeriod=1000
 * server.recovery.rollbackingRetryPeriod=1000
 * server.recovery.timeoutRetryPeriod=1000
 * server.maxCommitRetryTimeout=-1
 * server.maxRollbackRetryTimeout=-1
 * server.rollbackRetryTimeoutUnlockEnable=false
 * server.distributedLockExpireTime=10000
 * server.xaerNotaRetryTimeout=60000
 * server.session.branchAsyncQueueSize=5000
 * server.session.enableBranchAsyncRemove=false
 *
 * #Metrics configuration, only for the server
 * metrics.enabled=false
 * metrics.registryType=compact
 * metrics.exporterList=prometheus
 * metrics.exporterPrometheusPort=9898
 *
 */

public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}
